<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:icecore="http://www.icefaces.org/icefaces/core"
	xmlns:ace="http://www.icefaces.org/icefaces/components"
	xmlns:ice="http://www.icesoft.com/icefaces/component">
<h:head>
	<title>Pruebas de fases del ciclo de vida</title>
	<ice:outputStyle href="./xmlhttp/css/rime/rime.css" />
	<script src="shortcut.js" type="text/javascript"></script>
	<!-- 
	Aqui probamos los immediate y partialSubmit, ya que el primero obliga a que el valor/evento sea enviado antes de la
	fase de aplicacion de valores de solicitud (APPLY_REQUEST_VALUES), y el segundo va ejecutandose a medida que se hacen cambios.
	Es por esto que si un evento le ponemos immediate = "true", se ejecutara antes de los validadores, y si hace modificaciones sobre 
	objetos, tales modificaciones se sobreescribirán en la fase de actualizacion del modelo obligandonos a cambiar de fase manualmente.
	El immediate = "true" veo que es mas util en los campos de texto, ya que si tienen validadores obligamos a que sean enviados sus valores
	inmediatamente y que por supuesto sean evaluados. Si un evento ya sea un boton, link o demas, dependiendo del caso conviene no colocar 
	immediate = "true", ya que si hacemos modificaciones en el evento luego las perderemos en la fase de actualizacion del modelo. En adición, 
	convendria poner un immediate = "true" en un evento si queremos que por ejemplo cierre la ventana obviando los validadores, pero  ya  queda
	depediendo del caso. 
	 -->
</h:head>
<h:body>
	<ice:form id="formEdit">
		<ice:panelPopup modal="true" autoCentre="true"
			visible="#{pruebasMBean.panelPopupVisible}" 
			id = "panelPopupEdit"><!-- binding="#{pruebasMBean.popup}" -->
			<f:facet name="header">
				<ice:outputText value="Ventana modal" />
				<ice:commandLink immediate="true" accesskey="Escape" id="closeModal"
					action="#{pruebasMBean.closePanelPopup}">
					<span>Cerrar</span>
				</ice:commandLink>
			</f:facet>
			<f:facet name="body">
				<ice:panelGroup id="panelGroup1" style="padding-top : 5px; padding-left : 5px;">
					<ice:panelGrid binding="#{pruebasMBean.grid}" id="panelGrid1" columns="2">
						<ice:outputLabel for="firstname" value="Nombre:" />
						<!-- al parecer si agrego un binding en cualquier parte, en cada action que invoque
						llama al PostContruct del backingBean 
						binding="#{pruebasMBean.inputNombre}"
						-->
						<ice:inputText partialSubmit="true" id="firstname"
							required="#{pruebasMBean.panelPopupVisible}" value="#{pruebasMBean.nombre}" />
						<ice:outputLabel for="apellido" value="Apellido:"/>
						<ice:inputText immediate="true" id="apellido" partialSubmit="true"
							value="#{pruebasMBean.apellido}" />
						<ice:outputLabel for="descripcion" value="Descripcion:" />
						<ice:inputText immediate="true" partialSubmit="true"
							id="descripcion" value="#{pruebasMBean.descripcion}" /> 
					</ice:panelGrid>
					<!-- events="ActionEvent" -->
					<!-- <icecore:setEventPhase events="ActionEvent" phase="INVOKE_APPLICATION"> -->
					<!-- Con o sin el partialSubmit el actionListener es ejecutado en la fase de INVOKE_APPLICATION -->
					<!-- Con el immediate el actionListener es ejecutado en la fase de APPLY_REQUEST_VALUES previo a las validaciones -->
					<ice:commandLink immediate="true"
						actionListener="#{pruebasMBean.cancel}">
						<span>Cancelar</span>
					</ice:commandLink>
					<!-- </icecore:setEventPhase> -->
					<icecore:setEventPhase events="ActionEvent"
						phase="INVOKE_APPLICATION">
						<ice:commandLink
							action="#{pruebasMBean.aceptAction}"
							actionListener="#{pruebasMBean.acept}">
							<span>Aceptar</span>
						</ice:commandLink>
					</icecore:setEventPhase>

				</ice:panelGroup>
			</f:facet>
			<ice:panelGroup style="height:500px; width:300px;">
				<ice:outputText>Texto de prueba</ice:outputText>
				<ice:outputText
					value="Estado del panelPopup #{pruebasMBean.panelPopupVisible ? 'True' : 'False'}" />
			</ice:panelGroup>
		</ice:panelPopup>
	</ice:form>
	<ice:form>
		<ace:panel header="Prueba de ciclo de vida">
			<ice:panelGroup style="padding-top : 5px; padding-left : 5px;">
				<!-- Con el partialSubmit el actionListener es ejecutado en la fase de APPLY_REQUEST_VALUES -->
				<!-- <icecore:setEventPhase events="ActionEvent" phase="INVOKE_APPLICATION"> -->
					<ice:commandLink 
						action="#{pruebasMBean.openPanelPopup}">
						<span>Editar</span>
					</ice:commandLink>
				<!-- </icecore:setEventPhase> -->
				<ice:panelGrid columns="2">
					<ice:outputLabel for="nombre" value="Nombre:" />
					<ice:outputText id="nombre" value="#{pruebasMBean.nombreToShow}" />
					<ice:outputLabel for="apellido" value="Apellido:" />
					<ice:outputText id="apellido" value="#{pruebasMBean.apellidoToShow}" />
					<ice:outputLabel for="descripcion" value="Descripcion:" />
					<ice:outputText id="descripcion"
						value="#{pruebasMBean.descripcionToShow}" />
				</ice:panelGrid>
				<ice:commandButton action="#{pruebasMBean.clear}">
					Borrar Todo
				</ice:commandButton>
			</ice:panelGroup>
		</ace:panel>
	</ice:form>
</h:body>
</html>